#!/usr/bin/env python3
"""
统一日志管理模块
"""
import logging
import sys
from pathlib import Path
from datetime import datetime

# 定义日志级别
OP_LOG_LEVEL = logging.INFO

# ANSI颜色代码
class Colors:
    RESET = "\033[0m"
    RED = "\033[31m"
    GREEN = "\033[32m"
    YELLOW = "\033[33m"
    BLUE = "\033[34m"
    PURPLE = "\033[35m"
    CYAN = "\033[36m"

# 自定义日志格式化器，添加颜色支持
class ColoredFormatter(logging.Formatter):
    """带颜色的日志格式化器"""

    # 不同日志级别的颜色映射
    LEVEL_COLORS = {
        "DEBUG": Colors.BLUE,
        "INFO": Colors.GREEN,
        "WARNING": Colors.YELLOW,
        "ERROR": Colors.RED,
        "CRITICAL": Colors.PURPLE,
    }

    def format(self, record):
        # 获取日志级别对应的颜色
        color = self.LEVEL_COLORS.get(record.levelname, Colors.RESET)

        # 保存原始格式
        original_format = self._style._fmt

        # 修改格式以包含颜色
        self._style._fmt = f"{color}{original_format}{Colors.RESET}"

        # 格式化日志记录
        result = super().format(record)

        # 恢复原始格式
        self._style._fmt = original_format

        return result

# 无颜色的格式化器，用于文件日志
class FileFormatter(logging.Formatter):
    """用于文件日志的格式化器（无颜色）"""

    def format(self, record):
        # 移除颜色代码，确保文件中不包含ANSI转义序列
        log_message = super().format(record)
        return log_message

# 创建并配置操作员日志记录器
def setup_logger(log_file="honeypot.log"):
    """
    设置并返回操作员日志记录器

    Args:
        log_file (str): 日志文件路径

    Returns:
        logging.Logger: 配置好的日志记录器实例
    """
    # 创建操作员日志记录器
    op_logger = logging.getLogger("honeypot_operator")
    op_logger.setLevel(OP_LOG_LEVEL)

    # 避免重复添加处理器
    if not op_logger.handlers:
        # 创建logs目录（如果不存在）
        log_path = Path(log_file)
        log_path.parent.mkdir(parents=True, exist_ok=True)

        # 创建文件处理器
        file_handler = logging.FileHandler(log_file, encoding='utf-8')
        file_handler.setLevel(OP_LOG_LEVEL)

        # 创建控制台处理器
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setLevel(OP_LOG_LEVEL)

        # 创建格式化器
        file_formatter = FileFormatter("%(asctime)s [%(levelname)s] %(message)s")
        console_formatter = ColoredFormatter("%(asctime)s [%(levelname)s] %(message)s")

        # 设置格式化器
        file_handler.setFormatter(file_formatter)
        console_handler.setFormatter(console_formatter)

        # 添加处理器到日志记录器
        op_logger.addHandler(file_handler)
        op_logger.addHandler(console_handler)

    return op_logger

# 创建全局日志记录器实例
# 默认日志文件为 logs/honeypot_YYYYMMDD.log
today = datetime.now().strftime("%Y%m%d")
op_logger = setup_logger(f"logs/honeypot_{today}.log")

__all__ = ["op_logger", "setup_logger"]
